package logica;

import java.util.List;
import java.util.Map;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class Graficador {
    
    public static final String meses[] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto",
    "Septiembre", "Octubre", "Noviembre", "Diciembre"};

    public static void main(String[] args) {
        pastel();
        lineal();
        barras();
    }
    
    public static JFrame barras(Map<String, Double> mapValores, List<String> clavesMap, String tituloGrafica, String tituloFrame, String categoriaEtiqueta, String valoresEtiqueta){
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        int indice = 0;
        
        /*for (String clave : clavesMap) {
            dataset.addValue(mapValores.get(clave), clave, meses[indice]);
            indice++;
        }*/
        
        for (String clave : clavesMap) {
            dataset.addValue(mapValores.get(clave), clave, clave);
         //   indice++;
        }
        
        JFreeChart grafica = ChartFactory.createBarChart(
                //"Grafica de barras", // El titulo de la gráfica
                tituloGrafica,
                valoresEtiqueta, // Etiqueta de categoria
                "",//categoriaEtiqueta, // Etiqueta de valores
                dataset, // Datos
                PlotOrientation.VERTICAL, // orientacion
                true, // Incluye Leyenda
                true, // Incluye tooltips
                false // URLs?
                );

        //Ventana donde se mostrará la gráfica
        ChartFrame frame = new ChartFrame(tituloFrame, grafica);
        frame.pack();
        frame.setVisible(true);
        return frame;
    }

    public static void pastel() {
        //Conjunto de datos
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Android", 39.2);
        dataset.setValue("iOs", 22.9);
        dataset.setValue("Windows Mobile", 15.5);
        dataset.setValue("Symbian", 18.3);
        dataset.setValue("Otros", 2.3);
        dataset.setValue("Otraa", 10.3);
       
        JFreeChart grafica = ChartFactory.createPieChart3D(
                "Grafica pastel", // El nombre de la gráfica
                dataset, // El arreglo de datos
                true, // Indica si lleva leyenda
                true, // Indica si lleva tooltips
                false); // Indica si son URls

        //Ventana donde se mostrará la gráfica
        ChartFrame frame = new ChartFrame("Titulo de frame", grafica);
        frame.pack();
        frame.setVisible(true);
    }
    
    public static JFrame pastel(Map<String, Double> mapValores, List<String> clavesMap, String tituloGrafica, String tituloFrame) {
        //Conjunto de datos
        DefaultPieDataset dataset = new DefaultPieDataset();
        //Lleno con los porcentajes correspondientes
        for (String clave : clavesMap) {
            dataset.setValue(clave, mapValores.get(clave));
        }
        

        JFreeChart grafica = ChartFactory.createPieChart3D(
                //"Grafica pastel", // El nombre de la gráfica
                tituloGrafica,
                dataset, // El arreglo de datos
                true, // Indica si lleva leyenda
                true, // Indica si lleva tooltips
                false); // Indica si son URls

        //Ventana donde se mostrará la gráfica
        ChartFrame frame = new ChartFrame(tituloFrame, grafica);
        frame.pack();
        frame.setVisible(true);
        return frame;
    }

    public static void barras() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(1.0, "Egresos", "Enero");
        dataset.addValue(3.0, "Egresos", "Febrero");
        dataset.addValue(2.0, "Egresos", "Marzo");
        dataset.addValue(2.0, "Ingresos", "Enero");
        dataset.addValue(3.0, "Ingresos", "Febrero");
        dataset.addValue(4.0, "Ingresos", "Marzo");

        JFreeChart chart = ChartFactory.createBarChart(
                "Grafica de barras", // El titulo de la gráfica
                "Mes", // Etiqueta de categoria
                "Valor", // Etiqueta de valores
                dataset, // Datos
                PlotOrientation.VERTICAL, // orientacion
                true, // Incluye Leyenda
                true, // Incluye tooltips
                false // URLs?
                );

        //Ventana donde se mostrará la gráfica
        ChartFrame frame = new ChartFrame("Titulo de frame", chart);
        frame.pack();
        frame.setVisible(true);
    }

    public static void lineal() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(212, "Usuarios", "Agosto");
        dataset.addValue(504, "Usuarios", "Septiembre");
        dataset.addValue(1520, "Usuarios", "Octubre");
        dataset.addValue(1842, "Usuarios", "Noviembre");
        dataset.addValue(2991, "Usuarios", "Diciembre");

        //Creamos el grafico
        JFreeChart chart = ChartFactory.createLineChart(
                "Grafica Lineal", // Titulo
                "Mes", // Etiqueta de datos
                "Usuarios", // Etiqueta de valores
                dataset, // Datos
                PlotOrientation.VERTICAL, // orientacion
                false, // Incluye leyenda
                true, // Incluye tooltips
                false // urls
                );
        
         //Ventana donde se mostrará la gráfica
        ChartFrame frame = new ChartFrame("Titulo de frame", chart);
        frame.pack();
        frame.setVisible(true);
    }
}
